/*
*   内存管理
*/

let obj = {
  name: '黑马',
}

function get1() {
  const a = 'b';
}
get1();
// obj = null;

function foo() {
  const a = 'a';
  const b= 'b';
  function bar() {
    console.log(a);
    // console.log()
  }
}

const cc = foo();


// 引用计数
// 标记清除
// 标记整理
/*
*   设置引用计数，判断当前引用数是否为0，引用关系改变时修改数字
*   对象引用计数的数值来决定垃圾回收时机，如果为0，则回收)
*
* IE 6, 7 对DOM对象进行引用计数回收， 这样简单的垃圾回收机制，非常容易出现循环引用问题导致内存不能被回收， 进行导致内存泄露等问题
*/
function get() {
  const obj1 = {
    next: obj2
  };
  const obj2 = {
    prev: obj1
  };

  obj1.next = obj2;
  obj2.prev = obj1;
}

get();


function foo() {
  const a = 'b';
  function bar () {
    console.log(a);
  }
  return bar;
}

foo();

// --------------标记清除------------
// 从根节点(从全局出发)，找能够标记的对象，如果没有标记的，则清除，
// 可以解决循环引用清除问题
// 缺点：空间碎片化(新声明空间没法完全自由复用)




//---------------标记整理---------------
// 标记清除的增强
// 清除阶段会先执行整理，移动对象的位置
// 整理好以后再清除



